Android 개요
📱

Android 개요

Description
Android 개요
category
MobileHacking
Tag
Andorid
Mobile Security
Date
Apr 15, 2024 05:38 AM
목차

1. 안드로이드란?

스마트폰이나 테블릿에서 사용되는 대표적인 OS 중 하나이다.
Google에서 오픈소스 프로젝트로 진행되었으며 현재 최신 버전은 Android 14이다.
 

2. 안드로이드 구조

안드로이드의 기반은 Linux이며 개발언어는 C, C++, JAVA, Rust가 있다.
 
notion image

2.1 Android Runtime

Android 버전 5.0 이상을 실행하는 기기의 경우에는 앱이 자체 프로세스 내에서 자체 ART(Android Run Time) 인스턴스로 실행한다.
ARTDEX(Dalvik Executable) 파일을 실행하여 저용량 메모리 기기에서 여러 가상 머신을 실행하도록 작성되었다.
 

2.2 Linux 커널

Andorid 기반은 Linux 커널이다. ART는 스레딩 및 하위 수준의 메모리 관리와 같은 기능에서 Linux 커널을 사용한다.
 

2.3 HAL(하드웨어 추상화 계층)

Hardware Abstraction Layer의 약자이며, 상위 수준의 Java API Framework에 기기 하드웨어 기능을 노출하는 표준 인터페이스를 지원한다. HAL은 Android 8에서 발표되어 현재까지 사용 중이다.
HAL은 여러 라이브러리 모듈로 구성되어 있으며, 카메라 또는 블루투스 모듈과 같은 특정 유형의 하드웨어 구성 요소를 위한 인터페이스를 구현한다.
 

2.4 네이티브 C/C++ 라이브러리

ART, HAL 등 핵심 Android 시스템 구성 요소와 서비스가 C와 C++로 작성된 네이티브 라이브러리 기반으로 빌드되어 있다.
C나 C++ 코드가 필요한 앱을 개발하는 경우에는 Android NDK를 사용하여 네이티브 코드에서 직접 네이티브 플랫폼 라이브러리에 엑세스할 수 있다.
 
💡
Android NDK란? Android NDK는 C 및 C++와 같은 언어를 사용하여 네이티브 코드로 앱의 일부를 구현할 수 있게 하는 도구 모음이다.
 

2.5 Java API Framework

Android OS의 전체 기능 세트는 Java 언어로 작성된 API를 통해 액세스할 수 있다.
API는 핵심 모듈식 시스템 구성 요소 및 서비스 재활용을 단순화하여 Android 앱을 제작하는 데 필요한 빌딩 블록을 구성한다.
빌딩 블록의 핵심 기능들은 이러하다.
  • 기능이 풍부하며 확장 가능한 뷰 시스템 - 목록, 그리드, 텍스트 상자, 버튼 및 삽입 가능한 웹브라우저를 포함하여 앱의 UI를 빌드하는 데 사용 가능
  • Resource Manager - 현지화된 문자열, 그래픽 및 레이아웃 파일과 같은 코드가 아닌 리소스에 대한 액세스 제공
  • Notification Manager - 모든 앱이 상태 표시줄에 사용자 지정 알림을 표시할 수 있도록 지원
  • 콘텐츠 제공자 - 앱이 주소록 앱과 같은 다른 앱의 데이터에 액세스하거나 자신의 데이터를 공유할 수 있도록 지원
 

2.6 시스템 앱

간단히 Windows의 기본 프로그램이라고 생각하면 된다.
시스템 앱은 이메일, SMS 메시징, 캘린더, 인터넷 검색, 주소록 등이 있다.
 

3. 안드로이드 파일 시스템

안드로이드는 기존에 컴파일을 위해 Dalvik VM이 사용되었으나 한계점이 존재하여 ART(Android Runtime)이 새로 개발되어 사용 중이다.
둘다 DEX파일을 컴파일한다.

3.1 DEX

안드로이드의 실행 파일이라고 보면 된다.
DEX 파일은 Java 바이트코드를 Android dx Tool을 사용하여 Dalvik 바이트코드로 변환한 파일이다.
DEX 파일은 ART를 이용하여 구동시킨다. ART에서 실행되는 앱들은 가상환경에서 각자 분리되어 개별적인 프로세스, ID를 가지고 실행된다.
앱을 6개 키면 6개의 가상환경이 생성된다고 보면 된다. EXSI?
 

3.2 APK

Android Package File의 약자이며, APK는 안드로이드 애플리케이션 설치 파일이다.
형태는 압축 파일 형태로 이루어져 있으며, JAR 포맷의 변형된 형태이다.
APK는 크게 AndroidManifest.xml과 Classes.dex로 이루어져 있다.
  • AndroidManifest.xml : 애플리케이션에 필요한 권한 및 설정 정보를 포함하고 있다.
  • Classes.dex : DEX파일로 애플리케이션의 모든 소스코드가 내포되어 있다.
notion image
 

3.3 표준 파티션

중요 파티션만 간단히 정리해 보았다.
  • boot : 커널 파티션
  • system : 시스템 파티션
  • recovery : 복구 파티션
  • cache : 임시 데이터 파티션
  • userdata : 사용자 데이터(설치한 앱 등) 파티션
  • metadata : 메타데이터 파티션
  • radio : 무선 이미지 파티션
 

3.4 애플리케이션 저장 방식

애플리케이션이 저장되는 위치는 크게 3개 있다.

/data/app

사용자가 설치한 어플의 APK가 저장되는 디렉터리이다.
notion image

/system/app

기본으로 설치된 어플의 APK가 저장되는 디렉터리이다.
notion image

/data/data

설치되어있는 앱의 데이터가 저장되는 디텍터리이다.
notion image
 

샌드박스

샌드박스 기능은 독립적 프로세스를 실행시켜 앱 간의 충돌을 방지, 시스템 보호, 사용자 데이터 보호 등의 장점을 가지고 있다.
샌드박스에선 UID로 앱을 식별하고 있다.
/data/data
/data/data
 

ETC

adb 앱 uid pid

 
uid 확인방법
ls -al /data/data/
 
pid 확인방법
adb shell pidof com.example.example
 

adb root

adb root
💡
adb cannot run as root in production builds 처리방법
AVD 사용 시 Play Store 미지원 예뮬로 시도해야됨
notion image